#ifndef LIB_CONFIG_H
#define LIB_CONFIG_H
#ifdef __cplusplus
extern "C"
{
#endif

    /*
        Chinese is encoded in Unicode. If it is garbled, please change the encoding method of the editor.
        启凡科创STC基础库配置文件  By启凡科创 适用于STC8平台MCU

        使用注意事项：请先到将包含的芯片头文件改为当前使用的MCU头文件，如lib文件夹中未包含的请自行添加。

        使用到的Lib库，请在下面进行简单使能配置后，进入到相应的库头文件进行一些针对MCU型号的细节配置以确保正常使用

        编译内存溢出解决方法：
            在keil打开工程后，点击工程魔术棒，将memory mode改为large

        version:V1.1.1  2022-12-24
    */

    typedef unsigned char uint8_t;
    typedef signed char int8_t;
    typedef unsigned short uint16_t;
    typedef signed short int16_t;
    typedef unsigned long uint32_t;
    typedef signed long int32_t;

#include <INTRINS.H>
#include <STDIO.H>
#include <MATH.H>
#include <STRING.H>
#include <STDDEF.H>
#include <stdlib.h>

#ifndef NULL
#define NULL ((void *)0)
#endif

// #include <STC8a8k64s4a12.H> //根据单片机型号修改头文件
//   #include <STC8a8k64d4.H>//根据单片机型号修改头文件
//   #include <STC8g.H> //根据单片机型号修改头文件
//   #include <STC8.H> //根据单片机型号修改头文件
#include <STC8H.H>

/*
    下面的编译可选项配置中，
    0关闭/1开启 对应库编译使能，
    更详细的参数配置请到对应的头文件内进行进一步配置
*/
#define WIRE_EN 1      // IIC库
#define ADC_EN 0       // ADC库
#define DOWNLOAD_EN 1  // 自动下载库
#define MY_PRINTF_EN 1 // 打印库函数
#define EEPROM_EN 0    // EEPROM库
#define GPIO_EN 1      // GPIO库
#define KEYBOARD_EN 0  // 4*4矩阵键盘库
#define PWM_EN 0       // PWM库
#define WDT_EN 0       // 看门狗库
#define CPU_USE_EN 0   // CPU使用率库
#define OLED_LIB_EN 1  // OLED库
#define SPI_EN 0       // SPI库

#define INT0_ENABLE_EN 0 // 外部中断0编译使能
#define INT1_ENABLE_EN 0 // 外部中断1编译使能
#define INT2_ENABLE_EN 0 // 外部中断2编译使能
#define INT3_ENABLE_EN 0 // 外部中断3编译使能
#define INT4_ENABLE_EN 0 // 外部中断4编译使能

#define BUTTON_NUM 2         // 按钮库数量兼使能,0则关闭库
#define BUTTON_BUFFER_NUM 3 // 按钮存储缓冲区大小，此数值为最多存储多少个按钮,至少为1,不要比实际使用多设置，会消耗内存并占用更多cpu

#define TIMER0_EN 1 // 定时器0使能
#define TIMER1_EN 0 // 定时器1使能
#define TIMER2_EN 0 // 定时器2使能
#define TIMER3_EN 0 // 定时器3使能
#define TIMER4_EN 0 // 定时器3使能

#define UART1_EN 1 // 串口1使能
#define UART2_EN 0 // 串口2使能
#define UART3_EN 0 // 串口3使能
#define UART4_EN 0 // 串口4使能

#define TICKER_TASK_MAX 8 // 最大Ticker任务数量,0则关闭库

#if OLED_LIB_EN
#include "QF_OLED.h"
#endif

#if SPI_EN
#include "SPI.h"
#endif
#if ADC_EN
#include "ADC.h"
#endif
#if DOWNLOAD_EN
#include "DOWNLOAD.h"
#endif
#if EEPROM_EN
#include "EEPROM.h"
#endif
#if GPIO_EN
#include "GPIO.h"
#endif
#if KEYBOARD_EN
#include "KEY_BOARD_4X4.h"
#endif
#if PWM_EN
#include "PWM.h"
#endif
#if TICKER_TASK_MAX
#include "TICKER.h"
#endif
#if (TIMER0_EN || TIMER1_EN || TIMER2_EN || TIMER3_EN || TIMER4_EN)
#include "TIMER.h"
#endif
#if (UART1_EN || UART2_EN || UART3_EN || UART4_EN)
#include "UART.h"
#endif
#if WDT_EN
#include "WDT.h"
#endif
#if WIRE_EN
#include "WIRE.h"
#endif
#if MY_PRINTF_EN
#include "myprintf.h"
#endif

#if CPU_USE_EN
#include "cpu_use.h"
#endif

#if (BUTTON_NUM && BUTTON_BUFFER_NUM)
#include "button.h"
#endif

#if (INT0_ENABLE_EN || INT1_ENABLE_EN || INT2_ENABLE_EN || INT3_ENABLE_EN || INT4_ENABLE_EN)
#include "interrupt.h" //外部中断库
#endif

#ifdef __cplusplus
}
#endif
#endif
